package net.tksl.crm.controller;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import net.tksl.crm.controller.view.bean.ComboOpcionBean;
import net.tksl.crm.controller.view.bean.MenuItemBean;
import net.tksl.crm.controller.view.bean.ModuloPanelBean;
import net.tksl.crm.controller.view.bean.UsuarioSistemaBean;
import net.tksl.crm.service.DetalleCompendioService;
import net.tksl.crm.service.PaisService;
import net.tksl.crm.service.UsuarioAccesoService;
import net.tksl.crm.util.WebUtil;

import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

@Controller(value="ajaxAction")
@Scope(value="prototype")
public class AjaxAction extends ActionSupport{

	private static final long serialVersionUID = 1L;

	static Logger logger = Logger.getLogger(AjaxAction.class);
	
	@Autowired
	@Qualifier("usuarioAccesoServiceImpl")
	private UsuarioAccesoService usuarioAccesoService;
	
	@Autowired
	@Qualifier("detalleCompendioServiceImpl")
	private DetalleCompendioService detalleCompendioService;

	@Autowired
	@Qualifier("paisServiceImpl")
	private PaisService paisService;
	
	private Gson gson;
	private String rutaRaiz;
	
	public AjaxAction(){
		gson = new Gson();
		rutaRaiz = WebUtil.obtenerRutaRaiz();
	}
	
	public String cargar_menuUsuario(){

		List<Object> lstItemsMenu = new ArrayList<Object>();
	
		MenuItemBean inicio= new MenuItemBean();
		inicio.setLabel("Inicio");  
		inicio.setUrl(rutaRaiz + "/principal");
    	
		lstItemsMenu.add(inicio);
		
		UsuarioSistemaBean user = (UsuarioSistemaBean)WebUtil.leerAtributoSesion("usuarioSistema");

		String jsonMenu = "[]";
		if(user!=null){
			usuarioAccesoService.cargarMenuPorUsuario(user,lstItemsMenu,rutaRaiz);

			Type typeBarraMenu = new TypeToken<Collection<Object>>(){}.getType();
			jsonMenu = gson.toJson(lstItemsMenu,typeBarraMenu);
		}
		
		HttpServletRequest request = ServletActionContext.getRequest();
		request.setAttribute("json",jsonMenu);

		return Action.SUCCESS;
	}
	
	public String cargar_modulosPanelPrincipal(){
		
		UsuarioSistemaBean user = (UsuarioSistemaBean)WebUtil.leerAtributoSesion("usuarioSistema");
		List<ModuloPanelBean> lstModulosPanelPrincipal = new ArrayList<ModuloPanelBean>();
		String jsonModulos = "[]";
		if(user!=null){
			lstModulosPanelPrincipal = usuarioAccesoService.cargarModulosPorUsuario(user,rutaRaiz);

			Type typeLstModulos = new TypeToken<Collection<ModuloPanelBean>>(){}.getType();
			jsonModulos = gson.toJson(lstModulosPanelPrincipal,typeLstModulos);
		}
		
		HttpServletRequest request = ServletActionContext.getRequest();
		request.setAttribute("json",jsonModulos);
		
		return Action.SUCCESS;
	}
	
	public String cargar_opcionesCodigoTabla(){
		HttpServletRequest request = ServletActionContext.getRequest();
		UsuarioSistemaBean user = (UsuarioSistemaBean)WebUtil.leerAtributoSesion("usuarioSistema");
		
		String codigoTabla = request.getParameter("codigoTabla");
		String jsonOpciones = "[]";
		
		if(user!=null){
			List<ComboOpcionBean> lstOpciones = detalleCompendioService.listarDetallesPorCodigoTabla(codigoTabla);
			
			Type typeLstOpciones = new TypeToken<Collection<ComboOpcionBean>>(){}.getType();
			jsonOpciones = gson.toJson(lstOpciones,typeLstOpciones);
		}
		
		request.setAttribute("json",jsonOpciones);
		
		return Action.SUCCESS;
	}
	
	public String cargar_paises(){
		HttpServletRequest request = ServletActionContext.getRequest();
		UsuarioSistemaBean user = (UsuarioSistemaBean)WebUtil.leerAtributoSesion("usuarioSistema");
		
		String jsonPaises = "[]";
		if(user!=null){
			List<ComboOpcionBean> lstOpciones = paisService.listarPaises();
			
			Type typeLstOpciones = new TypeToken<Collection<ComboOpcionBean>>(){}.getType();
			jsonPaises = gson.toJson(lstOpciones,typeLstOpciones);
		}
		request.setAttribute("json",jsonPaises);
		return Action.SUCCESS;
	}
	
	public String cargar_ciudades(){
		HttpServletRequest request = ServletActionContext.getRequest();
		UsuarioSistemaBean user = (UsuarioSistemaBean)WebUtil.leerAtributoSesion("usuarioSistema");
		
		String codPais = request.getParameter("codigoPais");
		
		String jsonCiudades = "[]";
		if(user!=null){
			List<ComboOpcionBean> lstOpciones = paisService.listarCiudadesDePais(codPais);
			
			Type typeLstOpciones = new TypeToken<Collection<ComboOpcionBean>>(){}.getType();
			jsonCiudades = gson.toJson(lstOpciones,typeLstOpciones);
		}
		request.setAttribute("json",jsonCiudades);
		return Action.SUCCESS;
	}
}
